#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
海报生成工具类
提供测试和生产环境使用的海报生成功能
"""

import os
from PIL import Image, ImageDraw, ImageFont

from src.utils.test_image_overlay import create_test_logo


class PosterGenerator:
    """
    海报生成器类
    提供创建测试数据、生成测试背景和生成海报的功能
    """
    
    def __init__(self):
        """初始化海报生成器"""
        pass
    
    def create_test_data(self):
        """
        创建测试数据
        
        Returns:
            dict: 包含测试数据的字典
        """
        # 创建默认队标
        team_a_logo = create_test_logo(color=(255, 0, 0), text="FR")
        team_b_logo = create_test_logo(color=(0, 0, 255), text="DE")
        
        test_data = {
            'team_a': 'FRE',
            'team_b': 'GER',
            'team_a_logo': team_a_logo,  # 使用默认图标
            'team_b_logo': team_b_logo,  # 使用默认图标
            'match_time': '2025-10-15 20:00',
            'copywriting': 'Euro 2026\n Finally Comming to the World'
        }
        return test_data
    
    def create_sample_background(self, width=928, height=1664):
        """
        创建一个简单的测试背景图片
        
        Args:
            width (int): 图片宽度
            height (int): 图片高度
            
        Returns:
            PIL.Image: 背景图片对象
        """
        # 创建一个渐变背景
        image = Image.new('RGB', (width, height), (255, 255, 255))
        draw = ImageDraw.Draw(image)
        
        # 绘制渐变色背景
        for y in range(height):
            r = int(255 * (1 - y / height))
            g = int(200 * (1 - y / height))
            b = int(255 * (y / height))
            draw.line([(0, y), (width, y)], fill=(r, g, b))
        
        # 添加一些简单的图形元素
        draw.rectangle([width//4, height//4, 3*width//4, 3*height//4], 
                       fill=(100, 100, 150, 100), outline=(0, 0, 0), width=2)
        
        # 添加测试文本
        try:
            font = ImageFont.truetype("arial.ttf", 40)
        except:
            font = ImageFont.load_default()
        
        draw.text((50, 50), "测试背景图片", font=font, fill=(255, 255, 255))
        draw.text((50, 120), "用于测试文本和图标叠加功能", font=font, fill=(255, 255, 255))
        
        return image
    
    def generate_poster(self, background_path=None, output_path=None, match_info=None, 
                       width=928, height=1664):
        """
        生成海报
        
        Args:
            background_path (str, optional): 背景图片路径，如果未提供则会创建测试背景
            output_path (str): 输出海报路径
            match_info (dict, optional): 比赛信息，如果未提供则使用测试数据
            width (int): 背景图片宽度（仅在未提供background_path时使用）
            height (int): 背景图片高度（仅在未提供background_path时使用）
            
        Returns:
            bool: 是否成功生成海报
        """
        from src.processors.excel_processor import add_text_and_logos_to_image
        
        # 如果没有提供背景图片路径，则创建一个测试背景
        temp_bg = False
        if not background_path:
            print("创建测试背景图片...")
            bg_image = self.create_sample_background(width, height)
            background_path = "temp_test_background.jpg"
            bg_image.save(background_path)
            print(f"测试背景图片已保存到: {background_path}")
            temp_bg = True
        
        # 如果没有提供比赛信息，则创建测试数据
        if not match_info:
            print("创建测试数据...")
            match_info = self.create_test_data()
        
        # 确保输出目录存在
        output_dir = os.path.dirname(output_path) if os.path.dirname(output_path) else "temp_test_output"
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        
        # 生成海报
        print("处理海报...")
        success = add_text_and_logos_to_image(
            background_path, 
            output_path,
            match_info
        )
        
        if success:
            print(f"海报处理成功，已保存到: {output_path}")
        else:
            print("海报处理失败")
        
        # 清理临时背景文件
        if temp_bg and os.path.exists(background_path):
            os.remove(background_path)
            print(f"已清理临时文件: {background_path}")
        
        return success


def main():
    """主函数，用于测试PosterGenerator类"""
    print("开始测试海报生成器...")
    
    generator = PosterGenerator()
    output_path = os.path.join("temp_test_output", "test_poster.jpg")
    
    success = generator.generate_poster(output_path=output_path)
    
    if success:
        print("测试完成！")
    else:
        print("测试失败！")
        return False
    
    return True


if __name__ == "__main__":
    main()